#ifndef _MYHEADD_H_
#define _MYHEADD_H_


#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <strings.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <dirent.h>
#include <dirent.h>
#include <errno.h>
#include <sys/mman.h>
#include <stdbool.h>
#include <pwd.h>
#include <grp.h>
#include <linux/input.h>
#include<time.h>
#include <dirent.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/wait.h>
#include <signal.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <semaphore.h>
#include"kernel_list.h"

#include <pthread.h>


#include <sys/socket.h>
#include <arpa/inet.h>
//#include"cJSON.h"


typedef struct 
{
    char user_name[20];  //用户名
    char ip[16];         //ip
    unsigned short port; //广播端口port
    unsigned short private_port;//私聊port 
    unsigned short file_port; // 文件传输端口（独立端口）
    int is_offline;     //0=上线 ，1=下线；
    char user_qm[1024];  //用户个性签名
    struct list_head list;

} Friend;


//聊天记录
typedef enum
{
    PRIVATE_CHAT,  // 私聊
    GROUP_CHAT     // 群聊
}ChatType;
typedef struct
{
    ChatType type;  //记录类型
    char sender[20];  //发送者
    char receiver[20];  //接收者,(群聊时，为群聊标识)
    char content[300];//消息内容
    char time[20];
}ChatRecord;
//聊天记录


extern Friend *friend_list;
extern pthread_mutex_t list_mutex; // 声明互斥锁
extern unsigned short my_private_port;//存储当前用户的私聊端口
extern unsigned short my_file_port; // 独立的文件传输端口


////共享文件夹端口

////共享文件夹端口


//广播功能————上下线的
Friend *init_list(void);
Friend *new_friend(char *user_name, char *ip, unsigned short port,unsigned short private_port,unsigned short file_port);
bool find_friend(char *user_name);
void show_friend_list(void);
void *send_broadcast(void *arg);
void *recv_broadcast(void *arg);
void send_offline_msg(char *user_name);//发送下线通知;
//广播功能————上下线的

//实时通信的功能——-UDP 1对1
void cleanup_socket(void *arg);
void *private_chat_listener(void *arg) ;
void start_private_chat(char *friend_name, char *my_name) ;
void *private_chat_recv(void *arg);
//实时通信的功能——-UDP 1对1


//组播群发消息
void *recv_thread(void *arg) ;
void *send_thread(void *arg) ;
void ccc(char *uip,int uport,char *username);
//组播群发消息


//1对1 传递文件
char *get_name(char *filepath);
void start_file_transfer(char *friend_name,  char *filepath);
void  *file_transfer_listener(void *arg);
//1对1 传递文件



//修改个性签名
Friend *find23(Friend *friend_list,char *user_name);
void *send_signature_broadcast(void *arg);
void aaa(char *name);
//修改个性签名




//查找聊天记录
static void ensure_history_dir();
static void get_private_filename(char *filename, const char *user1, const char *user2);
static void get_group_filename(char *filename, const char *ip, int port);
static void get_current_time(char *time_str) ;
int write_history(ChatType type, const char *sender, const char *target, const char *content) ;
int read_history(ChatType type, const char *user, const char *target) ;
//查找聊天记录


//共享文件夹
void shared_start_service(const char *local_username);// 启动共享服务（程序启动时调用）
void shared_list_local(const char *local_username);// 查看本地共享文件
void shared_get_friend_list(const char *friend_name);// 获取好友共享列表
void shared_download_file(const char *friend_name, const char *filename, const char *local_username);// 下载文件

//共享文件夹
#endif